

立即执行函数,只执行一次，此类函数没有声明，在一次执行过后即释放。适合做初始化工作
<script type="text/javascript">
	(function (){
		var a = 1;
		var b = 2;
		console.log(a + b);
	}())
	(function (a , b , c){
		console.log(a + b + c * 2);
	}(1, 2, 3))

	var num = (function(a, b, c){ //执行完结果放到原位置，值給num
		var d = a + b + c;
		return d;
	}(1, 2, 3));

	(function(){}());// W3C建议第一种
	(function(){})()
</script>

<script type="text/javascript">
	//函数定义：函数声明和函数表达式
	function test(){};//test函数引用
</script>

<script type="text/javascript">
	function test(){
		var a = 1;
	}()//报错，function test(){var a = 1}是函数声明，不是表达式，不能被执行
</script>

<script type="text/javascript">
	function test(){
		var a = 1;
	}
	test();//表达式 函数引用被执行
	123;//数字表达式

	var a = function test(){
		console.log('a');
	}()//函数表达式能被执行  能被执行符号执行的表达式基本上就成立了立即执行函数 被执行后就会永久放弃
</script>

<script type="text/javascript">
	+ function test(){console.log('a')}();//有+ 趋势上函数要被转化成数字，被转化成表达式,表达式被执行后有一个功能，就是忽略函数的名字，就是表达式的引用
	- function test(){console.log('a')}();//+ - 这里是正负 ，！也可以，* /不可以，
	a && function test(){console.log('a')}();

	var test = function(){}();
</script>

<script type="text/javascript">
	(function test(){document.write('c')})();//function test(){}函数加括号变表达式，能够被执行
	(function test() {document.write('c')} ());//先识别最外边括号,类似(1 * 2 + (3 + 4))识别最外边括号，把里面东西变成表达式，再被里面括号执行
	
	(function () {document.write('c')} ()) ;//被执行后 test 引用不了，写和不写没什么区别
	//立即执行函数，函数被释放，引用不被保存
</script>

<script type="text/javascript">
	function test(a, b, c, d){
		console.log(a + b + c + d)
	}()//报错
</script>
<script type="text/javascript">
	function test(a, b, c, d){
		console.log(a + b + c + d)
	}(1, 2, 3, 4) 
</script>

<script type="text/javascript">
	function test(a, b, c, d){
		console.log(a + b + c + d)
	}

	(1, 2, 3, 4) // ,逗号也是运算符，不报错，会被系统识别成隔开
</script>

